package com.togo.algorithm.week;

import java.util.LinkedList;

/**
 * @Author taiyn
 * @Description
 * 给你一个整数数组 queries 和一个 正 整数 intLength ，请你返回一个数组 answer ，其中 answer[i] 是长度为 intLength 的 正回文数 中第 queries[i] 小的数字，如果不存在这样的回文数，则为 -1 。
 *
 * 回文数 指的是从前往后和从后往前读一模一样的数字。回文数不能有前导 0 。
 *
 *
 *
 * 示例 1：
 *
 * 输入：queries = [1,2,3,4,5,90], intLength = 3
 * 输出：[101,111,121,131,141,999]
 * 解释：
 * 长度为 3 的最小回文数依次是：
 * 101, 111, 121, 131, 141, 151, 161, 171, 181, 191, 201, ...
 * 第 90 个长度为 3 的回文数是 999 。
 * 示例 2：
 *
 * 输入：queries = [2,4,6], intLength = 4
 * 输出：[1111,1331,1551]
 * 解释：
 * 长度为 4 的前 6 个回文数是：
 * 1001, 1111, 1221, 1331, 1441 和 1551 。
 *
 * @Date 下午12:04 2022/3/27
 **/
public class No5253 {


    public long[] kthPalindrome(int[] queries, int intLength) {


        long[] result = new long[queries.length];
        for (int i = 0; i < queries.length; i++) {
            String s = (long) Math.pow(10, (intLength - 1) / 2) + queries[i] - 1 + "";
            result[i] = s.length() > (intLength + 1) / 2 ? -1
                    : Long.valueOf(s + new StringBuilder(s.substring(0, s.length() - intLength % 2)).reverse());
        }
        return result;
    }

    public boolean check(String str) {

        if(str == null || str.length() == 0) return false;

        LinkedList<Character> list = new LinkedList<>();

        for(int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if(c == '(' || c == '[' || c == '{') {
                list.addFirst(c);
            } else {
                char r = list.pop();
                if(c == ')' && r != '(') return false;
                if(c == ']' && r != '[') return false;
                if(c == '}' && r != '{') return false;
            }
        }

        return list.isEmpty();
    }

    public static void main(String[] args) {
//        int[] queries = new int[]{1,2,3,4,5,90};
//        int length = 3;
//
        No5253 no5253 = new No5253();
//
//        System.out.println(no5253.kthPalindrome(queries, length));
//// 输入: "([{}])"   输出: true
//// 输入: ")({})"    输出: false
//// 输入: "(())))"   输出: false
//// 输入: "(((((())" 输出: false
//// 输入: "()(]"     输出: false
//// 输入: "(()())[]"   输出: true
        String s = "(()())[]";
        System.out.println(no5253.check(s));
    }
}



